Anleitung
RISC OS Tintenstrahldrucker Dumper
Erstellt 22.09.2004 T. Milius
Geändert 13.04.2005 T. Milius
Das Programm besteht aus einem Printer Dumper und einem Kalibrierungsprogramm. Der Prinetr Dumper wurde so entwickelt, daß er für diverse Tintenstrahldrucker eingesetzt werden kann, und unterstützt bis zu 10 Tintenpatronen.
Der Dumper erlaubt es direkt oder mit angenäherten Farben in eine Spritedatei zu drucken. Die Seiten werden dabei als eigenständige Sprites innerhalb der Datei gespeichert.
Das Programm ist Freeware. Für nähere Information hierzu im bitte Copyright-Absatz nachlesen.
Der Dumper wurde von mir nur mit den Druckern EPSON Stylus Color 580 und EPSON Stylus Photo 700 getested. Man den Dumper aber an andere Drucker anpassen. Z.B. hat Martin Hodgson ein PDF den EPSON Stylus Photo 870 entwickelt.
Gebrauch und Modifikation erfolgt ausschließlich auf eigene Gefahr. Wenn Tinte in den Raum, z.B. auf die Tapeten, spritzt, Aliens ihr Haus angreifen, während oder kurz nachdem Sie den Dumper nutzen oder genutzt haben, so übernehme ich keine Verantwortung dafür.
Bitte beachten Sie, daß der Dumper nur zum Ausdruck verwendet werden kann. Er unterstützt keine weitergehenden Eigenschaften wie Anzeige der verbleibenden Tinte, Fehlerbehandlung oder Wechseln der Tintenptronen. In diesem Zusammenhang muß ich davor warnen, sich einen EPSON Stylus Color 580 zuzulegen, wenn man nur eine RISC OS Maschine besitzt und nicht ebenfalls einen PC. Ein Wechsel der Tintenpatronen nutzt undokumentierte Steuersequenzen und so kann man die Tintenpatronen nicht unter RISC OS oder LINUX wechseln, sondenr nur mit der original PC Software.
Martin Hodgson war so nett, PDFs für andere Drucker als den 580 zu schreiben, und fungierte als Betatester für meinen Dumper. Bitte setzen Sie sich mit ihm in Verbindung, wenn Sie meinen Dumper mit anderen EPSON-Druckern nutzen möchten.
Mein Dank gilt Robin Watts und Justin Fletcher für cmunge und Daniel Ellis. Mit deren Hilfe fand ich heraus wie der Assembler/C Adapter zum 26-Bit RISC OS aufgebaut werden mußte.
Kopieren Sie einfach die "!PDPEICal" Applikation irgenwo auf ihre Festplatte. Sie läßt sich auch direkt starten. Die Applikation ist zum Betrieb des Dumpers nicht zwingend notwendig, sondern nur zur Installation und Kalibrierung.
Starten Sie "!PDPEICal". Wenn Sie eine ältere inkompatible Version von ;PDumperEI" installiert haben (wie z.B. 1.x) wird diese Version automatisch entfernt und in einem speziellen temporären Verzeichnis gespeichert, daß automatisch angezeigt wird. nach dem Start wird die Applikation auf der rechten Seite der Programmleiste angezeigt, gleichzeitig öffnet sich ein Verzeichnis, daß die verfügbaren PDFs anzeigt. Zu diesem Zeitpunkt wurde der Dumper bereits installiert. Nun muß noch die zum Drucker gehörende Kalibrierungsdatei installiert werden. Um dies zu tun, laden sie das entspechende PDF und wählen es als aktiver Drucker. Bitte stellen sie sicher, daß es sich beim ausgewählten Drucker, um einen handelt, der von "PDumperEI" gesteuert wird.
Dann klicken Sie auf "!PDPEICal" auf der Programmleiste. Wenn es zum dem Drucker eine entsprechende Kalibrierungsdatei gibt, so wird diese nun installiert, was per Nachricht angezeigt wird. Wenn eine entsprechende Kalibrierngsdatei bereits instllaiert wurde, oder wenn keine Datei gefunden wurde, wird das Kalibrierungsfenster zusammen mit einem Verzeichnis, der verfügbaren Kalibrierungen angezeigt. Innerhalb des Kalibrierungsfensters gibt es ein Feld, wo man die Kalibrierungsdatei durch eine andere ersetzen kann. Dazu kann man eine Kalibrierungsdatei auf das Fenster ziehen. Sobald sich das Feld ändert, wird ein Knopf aktiviert, den man betätigen muß, um die neue Datei als Kalibrierungsdatei für den Drucker zu verwenden. Wenn Sie nur die Kalibrierungsdatei als Ganzes ändern oder den Kalibrierungsprozeß abbrechen wollen, kann man das Fenster schliessen, ansonsten startet man den Kalibrierungsprozeß. Es ist nicht zwangsläufig notwendig, das Feld mit der Kalibrierungsdatei zu füllen. Wenn ist leer ist, kann man den Kalibrierungsprozeß von Anfang an durchführen.
Schauen Sie in die separate Liste, um zu sehen, ob ihr Drucker bereits von dem Dumper unterstützt wird.
Wenn Sie ihren Drucker kalibrieren wollen, müssen Sie festlegen welche Grundfarben der Drucker zur Verfügung stellt. Jede dieser Grundfarben wird von einer Farbpatrone in Ihrem Drucker bereitgestelt. Die Intensität einer Grundfarbe wird, soweit möglich, vom Dumper in Übereinstimmung mit dem zu druckenden Inhalt des Dokuments angepaßt und an den Drucker gesendet. Die Anzahl der möglichen Intensitäten ergibt sich aus den Bits pro Pixel, die in einem Feld innerhalb des Kalibrierungsfensters festgelegt werden können. Im Moment ist der Wert auf 2 Bits für EPSON-Drucker eingestelt, er kann aber auf 1 oder 4 geändert werden. Der Dumper selbst kann intern mit Werten im Bereich von 1 bis 8 umgehen. Ein weiteres Feld legt die Zahl der Pad-Bits fest. Typischerweise ist der Wert 0. Wird ein anderer Wert festgelegt, so wird der absolute Betrag von der Anzahl der Bits per Pixel abgezogen. D.h. das dieser Wert die Anzahl der Intensitäten verringert. Man kann dieses Feld für Drucker verwenden, die z.B. 8 Farben haben, dafür aber 4 Bits zur Darstellung des Wertes benötigen. In einem solchen Fall ist 1 Bit des Farbwertes immer 0. Wählt man bei den Pad-bits einen positiven Wert, so werden die höchstwertigen Bits mit 0 aufgefüllt, bei einem negativen Wert werden die niederwertigen Bits mit 0 aufgefüllt, was zu einem nach links verschobenem Wert führt. Ein weiteres Feld bestimmt, wie die Intensitäten der Grundfarben in der Vorlage erzeugt werden. Man kann zwischen logarithmisch und linear wählen. Unabhängig von der Intensität bleibt der Farbton einer Grundfarbe immer bestehen. Die Grundfarebn können gemischt werden und so erhält man eine feste Anzahl von Farben, die gedruckt werden können. Hierauf basiert das ganze Ditherkonzept des Dumpers. Zu einer vorgegebenen Frabe versucht er, die beste Annäherung als Mix aus den wirklich verfügbaren Farben zu ermitteln. Welche Farben wirklich verfügbar sind, müssen Sie dem Dumper in den nächsten Schritten mitteilen.
Wählen Sie die Grundfarben, die den Farbpatronen des Drucker entsprechen. Danach starten Sie den Kalibrierunsgprozeß. Unmittelbar danach erscheint eine Draw-Datei, die jede Menge quadratischer Kästchen darstellt. Für jede festgelegte Farbpatrone gibt es eine Reihe mit Kästchen. Die Kästchen innerhalb einer Reihe unetrschiedliche Intensitäten.
Intern hat das Kalibrierungsprogram die Kalibrierungsdatei, so abgeändert, daß jedes Kästchen exakt durch Tinte genau einer Farbkartusche ungedithert in der durch die Druckintensitätsbits festgelegten Intensität gedruckt wird. Drucken Sie die Draw-Datei mit den Kästchen nun auf ihrem Drucker aus.
Wenn man sich den Ausdruck nun anschaut, wird man typischerweise festestellen, daß es mehr oder weniger große Abweichungen zwischen den gedruckten Farben und den Farben, so wie sie auf dem Schirm in der Draw-Datei dargestellt werden, gibt. Um dies zu korrigieren wird parallel mit der Draw-Datei eine Farbauswahlbox geöffnet, die die Farbe des Kästchens links oben auf dem Ausdruck darstellt. Man kann die Farbe nun abändern. Nachdem man OK gewählt hat (ACHTUNG: Nicht auf OK mit der Maus klicken. Auf meinem Iyonix werden die eingegebenen Werte dann nicht korrekt übernommen.), wird die rechts von der eben dargestellten Farbe stehende dargestellt. Nachdem alle Intensitäten für eine Farbpatrone dargestellt wurden, wird die erste Intensität der nächsten Farbpatrone dargestellt (d.h. der Anfang der nächsten Kächstenzeile) usw. bis alle Farben auf dem Ausdruck kalibriert wurden. man kann den Kalibrierungsprozeß durch Betätigen des Abbruch-Knopfes jederzeit abbrechen. In diesem Fall, wird die zuvor gültige kalibrierung wieder hergestellt.
Nun kann man versuchen, richtige Ausdrucke zu erstellen. Es ist allerdings wahrscheinlich, daß man noch nachkalibrieren muß. Hierzu einige Hinweise:
Bei Grautönen darf man die Helligkeit, ändern aber keinesfalls den Farbton. Alle RGB/CMY Werte müssen gleich sein!
Als erstes sollte man versuchen die richtige Helligkeit zu ermitteln. Danach kann man den Farbton entsprechend verschieben.
Prinzipiell kann man Rot anstelle von Grün verwenden usw.. Entsprechend seltsam wird am Ende das Ergebnis aussehen.
Die Intensitäten der Grundfarben logarithmisch zu erzeugen macht bei ab 8 oder 16 Intensitäten keinen Sinn. Man erhält extrem schnell reines Weiß.
Es besteht das Problem, die beste Intensität einer Grundfarbe zu ermitteln, wenn der Drucker mehr als eine Farbpatrone für diese Farbe verwendet (das zyanste Zyan). Das Kalibrierungsprogramm zieht alle subtraktiven Werte zusammen. Wenn dies dazu führt, daß eine Farbkombination außerhalb des Normfarbraums zu liegen kommt, so wird wie folgt verfahren. Zwischen der Farbe und der Papierfarbe wird eine Linie gebildet. Es wird die Stelle ermittelt, wo diese Linie die Seite des Farbraumwürfels schneidet. Die entsprechende Farbe des Farbraumwürfels ersetzt die ursprüngliche Farbe. Sie wird in der Praxis durch einen Mix aus der ursprünglichen Farbe und der Papierfarbe angenähert. In der Kalibrierungsmaske gibt es das Feld "Intensität" wo man die Intensität aller Farben durch Angabe eines Wertes größer als 100 Prozent erhöhen kann. Dies führt zu einer reduzierten Anwendung der Farbe, was hilfreich ist, wenn zuviel Tinte aufs Papier gedruckt wird (z.B. bei Interlaces).
Das Kalibrierungsdprogramm ist nur eine Möglichkeit, um den Drucker zu kalibrieren. Es kommt auf die Kalibrierungsdatei selbst an (ASCII-Format). Die Datei kann manuell editiert oder von einem selbstgeschrieben Programm erzeugt werden. Auf diese Weise kann man z.B. jede druckbare Farbe kalibrieren und nicht nur die Grundfarben. Eine Farbpatrone kann dann 2 Intensitäten haben und eine andere 16 usw.. Als Problem verbleibt jedoch die Berechnung der Würfel rund um die Farben. Zu diesem Zweck bietet das Kalibrierungsprogramm die Möglichkeit eine externe Kalibrierunsgdatei, die nur Farb-, Farbgruppen- und Druckermusterinformationen enthält mit den vom Kalibrierungsprogramm erzeugten Daten zu mischen. Der Name der Kalibrierungsdatei muß im Feld "..." eingegeben werden. Weitere Informationen finden Sie im Abschnitt "Externe Kalibrierungsdateien".
Man kann bis zu 255 Kalibrierungen für einen Drucker definieren. Dies läßt sich zur modus- oder papierabhängigen Feinkalibrierung nutzen. Interlace-Modi drucken mehr Tinte aufs Papier als Non-Interlace-Modi. Farben sehen auf Normalpapier anders aus als auf Fotopapier. Unter Ausnutzung der unterscheidlichen Kalibrierungen kann man die Ausgabe entsprechend abstimmen. Die Kalibriering kann für jede Seite wechseln, wenn man sich ein entsprechendes PDF schreibt.
Die Kalibrierungen können völlig unterschiedliche Farbpatronenkombinationen nutzen. Dies kann man dazu nutzen, um Modi ohne Schwarzpatrone zu definieren, oder um verschiedene Patronen zu simulieren, wie beim EPSON C80 im Graustufen modus.
In der Kalibrierungsmaske befindet sich ein Feld "...", wo man eine der existierenden Kalibrierungen auswählen kann, um sie zu modifizieren. Man kann auch eine neue Nummer vergeben. Der nächste Kalibrierungsprozeß bezioeht sich auf die in diesem Feld eingetragene Nummer. Man kann auch eine Kalibrirung durch Betätigen des "..." Knopfes löschen.
Ich habe die Entwicklung des Druckertreibers begonnen, während ich meinen eigenen USB-Stack entwickelte. Ich kaufte mir im Herbst 2001 einen EPSON 580 Stylus Color Drucker und mußte festestellen, daß keins der mit RISC OS (<=4.02) gelieferten Printer Defintion Files (PDF) mit ihm zurecht kam.
Ich beschloß notgedrungen, die Situation zu ändern. Ich fand heraus, daß nicht damit getan war nur ein neues PDF zu schreiben. Der mit RISCOS geleiferte Treiber unterstützte nur einen alten Grafikmodus. Unglücklicherweise setzte dieser Modus voraus, daß die Anzahl der schwarzen Düsen und die der farbigen Düsen gleich war. Der 580 hat zwei Druckköpfe mit 48 Düsen für Schwarz und 3*15 Düsen für Zyan, Mangenta und Gelb. So war es nicht möglich eine Kombination zu finden, die unter RISC OS unterstützt wurde. Der Drucker bietet einen neuen Grafikmodus, der das Problem umgeht. Dieser Modus interpoliert die angegeben Punkte (15) auf die zur Verfügung stehenden Düsen.
So habe ich denn einen neuen Printer Dumper entwickelt, um das Problem zu lösen. Während der Entwicklung traten einen Menge Probleme auf. Eins davon war die korrekte Justierung der Farben. Ein weiteres Problem war die Erzeugung von guten Dither-Mustern. Insgesamt ergab sich daraus die Aufgabenstellung Farbannährungen im Ausdruck zu erzeugen, die eine gewisse Ähnlichkeit mit denen Farben auf dem Schirm aufwiesen. Der erste Ansatz erwies sich als nicht zufriedendstellend und erlaubte nur die Verwendung von bis zu 4 Farben, so daß ich mich entschloß das interne Konzept komplett zu überarbeiten.
Ich betrachte den Dumper nicht als professionelles Produkt oder als Konkurrenz zu anderen professionellen Druckertreibern. Er ist mehr als Hilfe für all diejenigen Gefrusteten RISC OS Nutzer gedacht, die solze Besitzer eines Druckers sind, der von RISC OS nicht unetrstützt wird und für den keine professionellen Treiber verfügbar sind bzw. keine zufriedenstellenden Ergebnisse liefern. Ich sehe den Dumper mehr als ein Beispiel dafür an, wie man man unter RISC OS Druckertreiber schreiben kann.
Copyright 2002-2004 liegt bei Thomas Milius Stade, Deutschland
Der Quellcode des Dumpers ist mit leichten Einschränkungen Open Source. Diese Einschränkungen dienen dazu kommerziellen Gebrauch des Dumeprs ohne meine Einwilligung zu unterbinden. Ich selbst behalte mir vor den Code jederzeit in anderen Programmen zu verwenden ohne den Code dieser Programme öffentlich zugänglich zu machen. Diese Progamme können kommerziellen Character haben. Andere Programmierer können den Code jederzeit in ihren Programmen verwenden, solange kein Profit daraus gezogen wird, und der Code zu den gleichen Bedingungen veröffentlicht wird, wie dieses Programm. Im Falle daß daraus Profit gezogen werden soll, ist vorher meine Erlaubnis einzuholen.
Wenn Sie Fragen, Verbesserungsvorschläge oder Anmerkungen haben, können Sie mich unter folgendenr Adresse erreichen:
Thomas Milius
Tilsiter Straße 2
21680 Stade
Deutschland
Telefon:
04141/65005
Werktags von 19:00 bis 21:30, sowie an Wochenenden
E-mail:
Thomas-Milius@t-online.de
Homepage:
http://www.thomas-milius.homepage.t-online.de/
Ein Experte auf dem Gebiet des Tintenstrahldrucks, der Ihnen evt. bei der Kalibrierung oder dem Schreiben eines eigenen PDFs weiterhelfen kann, ist:
Martin Hodgson
E-mail:
marthodgson@freeuk.com
Die Dokumentation für den EPSON C40, der die gleichen Steuersequenzen wie der EPSON Stylus Color 580 zu benutzen scheint, steht unter:
http://www.epsondevelopers.com/
Man muß sich registrieren, aber dies ist kostenlos (Stand März 2002). Auf der Webseite finden sich um,fassende Informationen zu EPSON Steuersequenzen und EPSON Scanner.
Auf "users with commercial interests" beschränkt ist die Canon Entwickler Homepage. Die angegebenen Daten und Interessen werden manuell überprüft:
http://www.developers.canon-europa.com/
Als weitere gute Quelle kommt das GIMP-Projekt in Frage, das auf RISC OS von Martin Wuerthner portioert wurde:
Auf alle Fälle braucht man die RISC OS Programmers Reference Manuals zum Verständnis des RISC OS Drucksystems. Hierzu zählen auch die Dokumente die sich auf Erweiterungen des Drucksystems beziehen.
Veröffentlich:
Preis:
Bemerkung:
Korrigierte Fehler:
Neue Fehler/Probleme:
Neue Eigenschaften:
Veröffentlicht:
Preis:
Bemerkungen:
Korrigierte Fehler:
Neue Fehler/Probleme:
Neue Eigenschaften:
Veröffentlicht:
Preis:
Bemerkungen:
Korrigierte Fehler:
Neue Fehler/Probleme:
Neue Eigenschaften:
Folgendes müßte bei Bedarf noch ergänzt werden:
Folgende Hinweise bzgl. der PDF-Dateien und der Rechner, auf denen der Driver eingesetzt werden kann, sind zu beachten.
Der Dumper wurde auf meinem RiscPC (!Printers 1.64, RISC OS 4.02), meiner RiscStation (!Printers 1.64, RISC OS 4.03) und meinem IYONIX (!Printers 1.67, RISC OS 5.06) getestet.
Der Dumpername und die Dumpernummer sind registriert. Die Dumpermodulnummer ist 22 (&16).
Die zahl der vertiaklen Interlaces ist unabhägig von der Dumperhöhe. Die Dumpertiefe muß immer die Zahl der Düsen auf dem Druckkopf angeben. Die Dumperhöhe ist immer ein Vielfaches der Dumpertiefe und legt die Zahl der Stufen auf dem Druckkopf fest, d.h. die Art der Anordnung der Farben auf dem Druckkopf. Z.B. hat der 580 die Farbpatronen Zyan, Gelb, Magenta und Schwarz. Zyan wird ganz oben gedruckt. Darunter sind Gelb und Schwarz auf dem Druckkopf angeordnet. Die letzte Farbe auf dem Druckkopf ist Magenta. Man hat also 3 Stufen. Die Dumpertiefe ist 15. Die Dumperhöhe ist also 3*15=45. Zyan erhält die Position 0 auf dem Druckkopf (Siehe ZERO_SKIP unten), Gelb und Schwarz bekommen die Position 1 und Magenta die Position 2.
Es gibt keine Festlegung der Farben auf bestimmte unten erwähnte LINE_START oder LINE_PASS Sequenzen. Jeder Druckerpunkt wird durch eine bestimmte Anzahl Bits dargestellt. Eine Kalibrierung enthält die Bitmasken, die nötig sind, um bestimmte Farben zu drucken. Diese Bitmasken bestehen aus Gruppen von 1,2 oder mehr Bits für jede Farbpatrone. Jede Farbpatrone stellt eine Grundfabre dar, die in unterschiedlichen Intensitäten gedruckt werden kann. Die Anzhal der Intensitäten ergibt sich aus der Zahl der Bits pro Punkt. Wenn wenigsten ein Bit innerhalb der ersten Farbgruppe gesetzt ist, dann wird die LINE_START_1 Sequenz gesendet (Bei 2 Bit Bits 0-1 innerhalb der Bitmaske). Wenn wenigsten ein Bit innerhalb der zweiten Farbgruppe gesetzt ist, dann wird die LINE_PASS_1 Sequenz gesendet (Bei 2 Bit Bits 2-3 innerhalb der Bitmaske) usw.. Die Zuordnung Farbe/Farbpatrone zu Steuersequenzen wird über die den Farben zugeordneten Bitmaps gesteuert. Um die Handhabung zu vereinfachen, zeigt das Kalibrierungsprogramm zu jeder gewählten Farbpatrone eine Abkürzung der zugehörigen Steuersequenz. Dabei bekommt LINE_START_1 typischerweise die Steuersequenz für Schwarz und LINE_PASS_1 die Steuersequenz für Zyan. Dies gilt allerdings nicht, wenn der Drucker keine Schwarzpatrone besitzt. In einem solchen Fall erhält LINE_START_1 Zyan und LINE_PASS_1 Gelb. Das ist alles etwas kompliziert aber das Konzept ist hoch flexibel.
Die Zahl der Farbpatronen ergibt sich aus der höchsten genutzten LINE_PASS/LINE_START Steuersequenz in dem entsprechenden Modus.
In der PDF_Datei werden nur die folgenden Einträge genutzt:
Byte | Bedeutung | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Anzahl Bits im Drucker zur Farbintensitätsdarstellung | ||||||||||||
2 | Druckermodus:
|
||||||||||||
3 | Position der zu Farbe 1 gehörenden Patrone auf dem Druckkopf. Die am weitesten oben angeordnete Patrone bekommt die Position 0. Alle anderen Patronen bekommen entsprechend ihrer Position die Nummern 1, 2 usw.. Bitte beachten Sie, daß mehrere Partronen die gleiche Position haben können. sofern sie in gleicher Höhe auf dem Druckkopf angeordnet sind. Es muß ein (Dummy)wert eingetragen werden, auch wenn die Farbe nicht genutzt wird. | ||||||||||||
4 | Position der zu Farbe 2 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
5 | Position der zu Farbe 3 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
6 | Position der zu Farbe 4 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
7 | Position der zu Farbe 5 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
8 | Position der zu Farbe 6 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
9 | Position der zu Farbe 7 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
10 | Position der zu Farbe 8 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
11 | Position der zu Farbe 9 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
12 | Position der zu Farbe 10 gehörenden Patrone auf dem Druckkopf. | ||||||||||||
13 | Datenkompressionmodus:
|
||||||||||||
14 | Nummer der Kalibrierung, die beim Ausdruck in diesem Modus als Ausgangswert verwendet wird. Sie kann pro Seite geändert werden, um verschiedene Papiertypen in einem Job bedrucken zu können. |
Alle anderen Steursequnzen sind ungenutzt. Bitte beachten sie, daß der Dumper innerhalb der Steuersequenzen eine etwas sonderbare Eigenschaft aufweist, einen sog. Kellerstackrechner.
Beim Kellerstackrechner in den Druckersteuersequenzen handelt es sich um einen Rechner, der nach dem Prinzip der umgekehrten polnischen Notation arbeitet und dessen Befehle durch Bytes innerhalb der Steuersequenzen abgebildet werden. Kurz bevor eine Steuersequenz an den Drucker geschickt wird, wird der kleine Rechner aufgerufen. Während der Auswertung der Stuersequenz werden alle Bytes, die zu einer Rechnersteuersequenz gehören, entfernt. Der Rechner kann aber auch neue Sequenzen erzeugen, die in die Druckersteuersequenz eingebettet und anschliessend zum Drucker gesendet werden.
Zweck des Rechners ist es Zeichenketten dynamisch gemäß intern Zuständen des Dumpers zu erzeugen bzw. einige Zustände des Dumpers zu setzen. So ist z.B. die Datengröße nicht länger an eine bestimmte Stelle vor oder hinter der Hauptdruckersteuersequenz gebunden, und es ist nicht mehr notwendig einen neuen Dumper zu schreiben, bloß weil Hersteller A Little Endian Kodierung für die Größe verwendet, Hersteller B aber Big Endian Kodierung.
Der Rechner wird durch ein Byte mit dem Wert 0xFF innerhalb einer Steuersequenz aktiviert. Dieses Byte gehört zur Rechnersequenz und wird deshalb aus der Druckersteuersequenz entfernt. Ein Byte mit dem Wert von 0xFF beendet ebenfalls eine Druckersteuersequenz (Die Berechnung selbst kann durch eine andere Sequenz vorzeitig bedingt beendet werden). Weil die Sequenz 0xFF 0xFF keinen Sinn ergibt (Rechner an, Rechner aus), wird sie dazu verwendet den Wert 0xFF innerhalb der Druckersteuersequenz darzustellen.
Bitte beachten Sie, daß eine Druckersteuersequenz mehrere voneinander unabhängige Rechnersequenzen erhalten kann.
Der Kellerstackrechner selbst besteht aus 4 Stackregistern, einer Bedingungsflagge, um bedingte Befehlsausführung zu erlauben, und einer Reihe von Variablen. Der Inhalt dieser Variablen wird entweder durch den Dumper selbst gesetzt oder ergibt sich aus den Operationen, die mit dem Rechner durchgeführt werden. Beim Start einer Rechnersequenz wird die Bedingungsflagge auf FALSE gesetzt, der Zustand der Stackregister hingegen ist unbestimmt. Der Zustand der Variablen, die nicht vom Dumper selbst verwaltet werden, ist beim Start eines Druckauftrags ebenfalls umbestimmt.
Jede Operation belegt ein 1 Byte. Die Bits sind von 0 bis 7 durchnummeriert. Bit 7 legt fest, ob eine Operation immer ausgeführt wird (=1) oder nur dann, wenn die Bedingungsflagge den Wert TRUE besitzt (=0).
Man kann die Ausführung der Kellerstacksequnzen kontrollieren, wenn man folgenden Befehl eingibt:
TraceCellarStack on
Im Folgenden wird ein Traceprotokoll der Sequenzen in die Ausgabedatei geschrieben, die dann allerdings nicht ausgedruckt werden kann. Man die Protokolleirung wieder abschalten, indem man dne folgenden Befehl eingibt:
TraceCellarStack off
Den aktuellen Tracezustand kann man sich mit folgendem Befehl anzeigen lassen:
TraceCellarStack
C000XXXX - Lade Nibble. XXXX enthält den Nibblewert, der auf den Stack geladen wird (Register A). Der Stack wird vorher gepusht. C001XXXX - Setze Bedingungsflagge. XXXX enthält den durchzuführenden Vergleich: 0000 - A = 0 0001 - A != 0 0010 - A < 0 0011 - A > 0 0100 - A <= 0 0101 - A >= 0 0110 - Setze Bedingungsflagge auf FALSE 0111 - Setze Bedingungsflagge auf TRUE 1000 - A = B pop registers 1001 - A != B pop registers 1010 - A < B pop registers 1011 - A > B pop registers 1100 - A <= B pop registers 1101 - A >= B pop registers 1110 - Invertiere Bedingungsflagge 1111 - reserviert C010XXXX - Führe Stackoperation durch. XXXX enthält die durchzuführende Operation: 0000 - B + A 0001 - B - A 0010 - B * A 0011 - B / A 0100 - B MOD A 0101 - B HOCH A 0110 - B um A nach rechts verschieben 0111 - B um A nach links verschieben 1000 - INVERTIERE A 1001 - B ODER A 1010 - B UND A 1011 - B EXOR A 1100 - POP Stack (A geht verloren) 1101 - PUSH Stack (A wird dupliziert) 1110 - vertausche A B 1111 - (B << 4) ODER (A UND 0x0000000F). Um beliebige Werte über Nibbles zu laden Die Operanden werden im Regelfall vom Stack entfernt, d.h. der Stack wird entsprechend gepoppt und das Resultat wird danach auf den Stack gepusht. C0110XXX - Schreibe den Inhalt von Register A in die Druckersteuersequenz. Der Stack wird danach gepoppt. XXX enthält das Ausgabeformat: 000 - Als lesbare Dezimalzahlen (0-9) 001 - 1 Byte binärer Zahlenwert 100 - Als lesbare kleingeschriebene Hexadezimalzahlen (0-9, a-f) 101 - Als lesbare großgeschriebene Hexadezimalzahlen (0-9, A-F) und 10 - 2 Bytes binärer Zahlenwert 11 - 4 Bytes binärer Zahlenwert mit 0 - Little Endian 1 - Big Endian C01110XX - Vergleiche Seitengröße (Breite/Höhe in Variablen 0x00000018 and 0x00000019) mit den Seitengrößensequenzen innerhalb der Seitengrößensequenzkonfigurationstabelle. Wird ein entsprechender Eintrag gefunden, so wird die Bedingungsflagge auf TRUE gesetzt und die durch XX (0-3) festgelegte Sequenz wird entsprechend ihres Typs (siehe unten) entweder in die Druckersteuersequenz geschrieben oder ihre Werte werden auf den Stack gepusht. wird kene Übereinstimmung gefunden, so wird die Bedingungsflagge auf FALSE gesetzt. Seitengrößensequenzen werden in der Konfigurationsdatei auf folgende Art und Weise eingebunden: "page_sequence_start" markiert den Anfang der Sequenzliste. "page_sequence_end" markiert das Ende der Sequenzliste. Dazwischen steht eine beliebige Anzahl von Seitengrößensequenzen im folgenden Format: dezimale_Seitenbreite dezimale_Seitenhöhe [Sequenz_0 [Sequenz_1 [Sequenz_2 [Sequenz_3]]]] Eine Sequenz besteht aus einer Typkennung gefolgt von einem Doppelpunkt: - V: bedeutet, daß eine durch Komma getrennte Liste von dezimalen Werten folgt, die auf den Stack gepusht werden. - S: bedeutet, daß eine Steuersequenz folgt, die in die Druckersteuersequenz eingefügt wird. Die Sequenz wird in der üblichen Form für Steuersequenzen angegeben, die auch von Print Edit verwendet wird (Eine Mixture aus in Anführungszeichen eingeschlossenen Buchstbaben und Dezimalzahlen, die durch Kommas getrennt sind. Kellerstacksequnezen sind hier nicht erlaubt, so daß 255 wirklich das Zeichen 255 beschreibt). Wichtig: Eine Sequenz darf kein Leerzeichen enthalten, da dies den Anfang der nächsten Sequenz anzeigt. Eine Sequenz kann optional festgelegt werden und S: bzw. V: Sequenzen können beliebig gemischt werden. Beispiel: 12345 456789 S:27,"(","C",4,0,"q",16,0,0 V:123,456 Sequenz 0 für Seitengröße 12345/456789 ist 27,"(","C",4,0,"q",16,0,0 und wird in die Druckersteuersequenz eingefügt. Sequenz 1 liefert die Werte 123 und 456, die auf den Stack gepusht werden. 123 wird zuerst gepusht, dann folgt 456. danach enthält Register B 123 und Resgister A 456. Sequenz 2 und Sequenz 3 sind nicht definiert. Mit solchen Sequenzen kann man Folgendes machen: a. Man kann dem Drucker die Papiergröße mitteilen (A4, Letter) b. Man kann am Drucker die Papierquelle auswählen c. Man kann dem Drucker den Papiertyp mitteilen (Photo/normal) Anmerkung: Benutzen Sie einen Trick, um besondere Papiertypen zu verwalten. RISC OS unterstützt es nicht, die Art des Papiers anzugeben, man kann aber eine geringfügig kleinere Breite oder Höhe als die normale Papiergröße angeben. Dies beeinflußt den Druckprozeß nicht negativ. C0111110 - Speichere Stackinhalt B in die durch A bestimmte Variable. Der Stack wird danach gepoppt (A geht verloren). C0111111 - Lade den Stack mit dem Wert der durch A bestimmten Variable. A wird durch den Inhalt der Variable ersetzt. C100XXXX - Lade den Stack mit dem Wert einer Druckauftragzustandsvariablen. Der Stack wird vorher gepusht. XXXX enthält die Druckauftragzustandsvariablen. C10100XX - Schreibt den Namen der Ausgabedatei in die Druckersteuersequenz. Der Stack bleibt unverändert. XX enthält das Ausgabeformat: 00 - reserviert 01 - Dateiname 10 - Pfad 11 - Pfad und Dateiname 01010100 - Schreibe eine Bytesequenz, die dem Kommando folgt, bedingt in die Druckersteuersequenz. Die Sequenz wird durch 11010100 begrenzt welches sonst keinen Sinn ergibt, da es die gleiche Bedeutung hätte, als ob man die Sequenz außerhalb einer Kellerstacksequenz direkt in die Druckerstersequenz schreiben würde. Ein 11010100 Byte innerhalb der Sequenz kann durch zwei aufeinanderfolgende 11010100 dargestellt werden. Gemäß der Bedingungsflagge wird die Sequenz geschrieben oder ignoriert. In beiden Fällen wird die Berechnung mit dem Kommando hinter dem terminierenden 11010100 fortgesetzt. 11111111 kann in die Sequenz eingebettet werden. Es wird nicht als Kellerstacksequenzterminierungskennzeichen behandelt. 11010100 - Beendet eine Zeichensequenz, die durch 01010100 eingeleitet wurde. 11010100 ohne 01010100 wird ignoriert. 11111111 - Ende der Kellerstacksequenz. Der Kommandozeiger zeigt am Ende der Ausführung einer Kellerstackberechnung auf das folgende Zeichen in der Druckersteuersequenz. Dieses Kommando ist Pflicht. Wenn es nicht existiert, wird die gesamte Stackberechnung bis auf die Änderung der Variablen ignoriert. 01111111 - Bedingtes Ende der Kellerstacksequenz. Die Programmausführung hört hier auf, aber die folgenden Zeichen werden bis zum nächsten 0xFF übersprungen.
Alle anderen Werte sind reserviert.
Im Bereich 0x00000000 bis 0x0000000F liegen Variablen die zur Laufzeit des Druckauftrags durch den Dumper gesetzt werden (Nur Lesezugriff).
0x00000000 - Anzahl der verbleidenden Kopien 0x00000001 - Aktuelle Stufe (aktualisiert vor jeder Datenausgabe) 0x00000002 - Aktuelles vertikales Interlace (aktualisiert vor jeder Datenausgabe) 0x00000003 - Aktuelles horizontales Interlace (aktualisiert vor jeder Datenausgabe) 0x00000004 - Anzahl Bytes von Daten die im nächsten Block gesendt werden (aktualisiert vor jeder Datenausgabe) 0x00000005 - Bytes die pro Zeile gefüllt sind (aktualisiert vor jeder Datenausgabe) Ausgeschlossen sind leere Bereiche auf der rechten Seite. Achtung: Die Bytes sind nicht gleich Pixel. 0x00000006 - Aktuelle Seite im Druckaufrag 0x00000007 - Nummer des Druckjobs seit der Dumper gestart wurde. Verwendung zur eindeutigen Identifikation. 0x00000008 - 0x0000000F reserviert
Im Bereich 0x00000010 bis 0x0000004F liegen Variablen die vom Drucksystem festgelegt werden (Nur Lesezugriff).
0x00000010 - Gesamtanzahl vertikaler Durchläufe 0x00000011 - Gesamtanzahl horizontaler Durchläufe 0x00000012 - Gesamtanzahl Farben (Noch nicht implementiert) 0x00000013 - Gesamtanzahl Punkte pro Druckkopf 0x00000014 - Anzahl vertikale Punkte pro Inch 0x00000015 - Anzahl horizontale Punkte pro Inch 0x00000016 - Vertikalversatz am Seitenanfang in Punkten 0x00000017 - Horizontalversatz links am Zeilenanfang in Punkten 0x00000018 - Seitenbreite in Inch/10000 0x00000019 - Seitenhöhe in Inch/10000 0x0000001A - Seitendruckbereich oben links Vertikalposition in Inch/10000 0x0000001B - Seitendruckbereich oben links Horizontalposition in Inch/10000 0x0000001C - Seitendruckbereich unten rechts Vertikalposition in inch/10000 0x0000001D - Seitendruckbereich unten rechts Horizontalposition in inch/10000 0x0000001E - 0x0000004F reserviert
Im Bereich 0x00000050 bis 0x0000007F liegen Variablen, die das Verhalten des Dumpers steuern (Schreib-/Leserechte hängen von der Variable ab):
0x00000050 - Gesamtanzahl Stufen (nur lesen) 0x00000051 - Datenkompressionsformat (lesen/schreiben) 0x00000052 - Vertikalversatz in Punkten, der nicht über Steuersequenzen abgedeckt wird (lesen/schreiben). Wird bei jedem Seitenstart automatisch aktualisert. Sinnvoll kann man der Wert nur in der Seitenstartsequenz abgeändern. 0x00000053 - Verbleibende Anzahl der Kopien der Seite (lesen/schreiben) Wird bei jedem Seitenstart automatisch aktualisert. 0x00000054 - Anzahl der Farbpartonen (nur lesen) 0x00000055 - Bits pro Druckerpixel (nur lesen) 0x00000056 - Druckermodus (nur lesen) 0x00000057 - Kalibrierung (lesen/schreiben) Wird mit Byte 14 aus ZERO_SKIP initialisiert. Kann in Abhängigkeit vom Papiertyp für jede Seite geändert werden. 0x00000058 - 0x0000007F reserviert
Im Bereich 0x00000080 bis 0x000000FF liegen Variablen, die von Programmen beliebig genutzt werden können. Sie werden zu Beginn des Druckauftrags nicht initialisiert, bleiben aber bis zum Ende des Druckauftrags erhalten (Schreib-/Lesezugriff):
0x00000080 - 0x0000008F frei nutzbare Variablen 0x00000090 - 0x000000FF reserviert
Um die Programmierung zu verdeutlichen, zeigt das folgende Beispiel, wie man einen Vertikalvorschubzähler implmentiert, um die Steuersequenzen zu optimieren.
Binär |
Dezimal |
Reg A |
Reg B |
Reg C |
Reg D |
Bemerkung |
Initialisierungssequenz |
||||||
11111111 |
255 |
Start |
||||
Lösche Vorschub |
||||||
10000000 |
128 |
0 |
Lade Wert 0, um ihn in die Variable zu speichern |
|||
10001000 |
136 |
8 |
0 |
Variablennummer höherwertiges Nibble (8) |
||
10000000 |
128 |
0 |
8 |
0 |
Variablennummer niederwertiges Nibble (0) |
|
10101111 |
175 |
0x80 |
0 |
Setze Variablennummer zusammen (0x80) |
||
10111110 |
190 |
0 |
Speichere Wert in die Variable |
|||
11111111 |
255 |
Ende |
||||
Sequenz am Zeilenende |
||||||
11111111 |
255 |
Start |
||||
Addiere Vorschub |
||||||
Lade alten Vorschubwert |
||||||
10001000 |
136 |
0x08 |
Variablennummer höherwertiges Nibble (8) |
|||
10000000 |
128 |
0x00 |
0x08 |
Variablennummer niederwertiges Nibble (0) |
||
10101111 |
175 |
0x80 |
Setze Variablennummer zusammen (0x80) |
|||
10101101 |
173 |
0x80 |
0x80 |
Dupliziere Variablennummer, um Wert später zurückspeichern zu können. |
||
10111111 |
191 |
e.g. 0 |
0x80 |
Lade Wert aus Variable |
||
Vorschub hinter der Zeile |
||||||
10000001 |
129 |
0x01 |
e.g. 0 |
0x80 |
Vorschub höherwertiges Nibble (1) |
|
10000001 |
129 |
0x01 |
0x01 |
e.g. 0 |
0x80 |
Vorschub niederwertiges Nibble (1) |
10101111 |
175 |
0x11 |
e.g. 0 |
0x80 |
Setze Vorschub zusammen (0x11) |
|
Erhöhe Vorschub |
||||||
10100000 |
160 |
e.g. 0x11 |
0x80 |
Addition des alten und neuen Wertes am oberen Stackende |
||
Speichere Vorschub |
||||||
10101110 |
174 |
0x80 |
e.g. 0x11 |
Vertausche Variablennummer und Vorschub auf dem Stack |
||
10111110 |
190 |
e.g. 0x11 |
Speichere Wert in die Variable |
|||
11111111 |
255 |
End |
||||
Datensequenz |
||||||
Es wird unterstellt, daß die Vorschubsequenz sich schon in der Steuersequenz befindet und man an dieser Stelle nur den Wert einsetzen muß. |
||||||
11111111 |
255 |
Start |
||||
Baue Vorschubwert in die Sequenz ein |
||||||
10001000 |
136 |
8 |
Variablennummer höherwertiges Nibble (8) |
|||
10000000 |
128 |
0 |
8 |
Variablennummer niederwertiges Nibble (0) |
||
10101111 |
175 |
0x80 |
Setze Variablennummer zusammen (0x80) |
|||
10101101 |
173 |
0x80 |
0x80 |
Dupliziere Variablennummer, um Wert später zurücksetzen zu können |
||
10111111 |
191 |
e.g. 0x11 |
0x80 |
Lade Vorschub aus Variable |
||
10110111 |
183 |
0x80 |
Füge Vorschub als 4 Byte big endian Binärwert in die Steuersequenz ein |
|||
Lösche Vorschub |
||||||
10000000 |
128 |
0 |
0x80 |
Lade Wert 0, um ihn in die variable zu speichern. |
||
Speichere Vorschub |
||||||
10101110 |
174 |
0x80 |
0 |
Vertausche Variablennummer und Vorschub auf dem Stack |
||
10111110 |
190 |
0 |
Speichere Vorschub in Variable |
|||
11111111 |
255 |
End |
Die Dateien sind genau wie der Drucker benannt und stehen im <Printers$Dir>.Resources.PDumpers.PDumperEI Verzeichnis Sie werden normalerweise über das Konfigurationsprogram geändert, lassen sich aber auch von Hand abändern. Ein Satz vollständig kalibrierter Musterdateien steht unter <PDPEICal$Dir>.Resources.Calibs. Die grundlegende Mutervorlage ist <PDPEICal$Dir>.Resources.CalibDef, die keine Farbdefinitonen enthält. Das Kalibrierungsprogramm versucht als erstes die aktuellen Einstellungen für den Drucker zu ermitteln. Findet es hier nichts, so sucht es im Calibs Verzeichnis nach Vorlagen.
Die druckerspezifischen Kalibrierungsdateien bestehen zum Einen aus Kommentarzeilen, die mit einem "#" beginnen und zum Anderen aus druckerspezifischen Einstellungen. Die Zeilen dürfen 511 Byte lang sein. Die Druckereinstellungen sind nach Gruppen gegliedert. Jede Gruppe wird durch ein entsprechende gruppenspezifische Startkennung (optional mit Parametern) eingeleitet. Darauf folgen die Zeilen mit den diversen Einstellungen. Ihr Format hängt von der Gruppe ab. Ende findet sich eine Zeile mit der Gruppenabschlußkennung. Leerzeilen sind nicht erlaubt. Kommentarzeilen können beliebig plaziert werden. Es gibt die folgenden Gruppen:
Einstellungsgruppe | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Startkennung | Abschlußkennung | |||||||||||||||||||||
Position | Bedeutung | |||||||||||||||||||||
Druckkopfjustage | ||||||||||||||||||||||
head_adjustment_start | head_adjustment_end | |||||||||||||||||||||
1 | "v" oder "h" für vertikal bzw. horizontal | |||||||||||||||||||||
2 | Patrone (0-9) | |||||||||||||||||||||
3 | Justierung in Pixel als ganze Zahl (horizontal sind nur positive Werte erlaubt) | |||||||||||||||||||||
Seitenbehandlung | ||||||||||||||||||||||
page_sequence_start | page_sequence_end | |||||||||||||||||||||
1 | Papierbreite in Inch/10000 (dezimal) Wichtiger Hinweis: Infolge interner Rundungsdifferenzen können die Papiergrößen von DIN AX und DIN AX Generic voneinander abweichen. Benutzen Sie den "Dummy for page size" Druckermodus mit einer leeren Seite um die exakten Werte zu bestimmen. |
|||||||||||||||||||||
2 | Papierhöhe in Inch/10000 (dezimal) | |||||||||||||||||||||
3 | Sequenz 0 (optional). Eine Sequenz wird durch eine Typenkennung "S:" oder "V:" eingeleitet. Hinter "S:" folgt eine Steuersequenz in der Form, der sie auch in PrintEdit verwendet wird, aber ohne Kellerstack, so daß 255 auch wirklich das Zeichen 255 beschreibt. Leerzeichen sind innerhalb der Sequenz nicht erlaubt, als Ersatz ist 32 zu verwenden. Hinter "V:" folgen bis zu 4 kommagetrennte ganze Zahlen. Alle diese Sequenzen sind nur dann von Nutzen, wenn sie entsprechend in den Kellerstacksequenzen referenziert werden. |
|||||||||||||||||||||
4 | Sequenz 1 (optional nur wenn Sequenz 0 existiert). | |||||||||||||||||||||
5 | Sequenz 2 (optional nur wenn Sequenz 1 existiert). | |||||||||||||||||||||
6 | Sequenz 3 (optional nur wenn Sequenz 2 existiert). | |||||||||||||||||||||
Farbkalibrierung | ||||||||||||||||||||||
printable_colours_start [Reference_Number] | printable_colours_end | |||||||||||||||||||||
1 | Rotkomponente der druckbaren Farbe (dezimal 0-255) | |||||||||||||||||||||
2 | Grünkomponente der druckbaren Farbe (dezimal 0-255) | |||||||||||||||||||||
3 | Blaukomponente der druckbaren Farbe (dezimal 0-255) | |||||||||||||||||||||
4 | Minimaler Rotwert, der von der Farbe abgedeckt wird (dezimal 0-255) | |||||||||||||||||||||
5 | Maximaler Rotwert, der von der Farbe abgedeckt wird (dezimal 0-255) | |||||||||||||||||||||
6 | Minimaler Grünwert, der von der Farbe abgedeckt wird (dezimal 0-255) | |||||||||||||||||||||
7 | Maximaler Grünwert, der von der Farbe abgedeckt wird (dezimal 0-255) | |||||||||||||||||||||
8 | Minimaler Blauwert, der von der Farbe abgedeckt wird (dezimal 0-255) | |||||||||||||||||||||
9 | Maximaler Blauwert, der von der Farbe abgedeckt wird (dezimal 0-255) | |||||||||||||||||||||
10 | Druckermuster, um die Farbe zu erzeugen (hexadezimal bis zu 32 Bit). Hängt von den Bits pro pixel, der Zahl der Patronen und dem vom Drucker benötigten Format für die Pixelintensität ab. | |||||||||||||||||||||
11 | Farbgruppeninformation (hexadezimal).
| |||||||||||||||||||||
12 | Prozentanteil der Papierfarbe, der benötigt wird, um die Farbe abzubilden. Üblicherweise 0. Maximal 99. Dieser Wert wird benutzt, wenn bei Subraktionsfarben zu viel Tinte aufs Papier gespritzt wird. Der Wert errechnet sich in dem man eine Linie zwischen dem Farbpunkt mit Komponentenwerten kleiner 0 außerhalb des RGB-Würfels und dem Punkt der Papierfarbe legt. An der Stelle wo die Linie durch eine Seite des RGB-Würfels geht, liegt der Punkt dessen Farbkomponenten in dieser Zeile gespeichert werden. Dieser Wert errechnet sich aus der Länge der Linie zwischen dem gespeicherten Punkt und dem Originalpunkt geteilt durch die Länge der Linie zwischen dem Originalpunkt und der Papierfarbe. |
Die "Dummy for page size" Auflösung ist ein spezieller Druckermodus, der es Ihnen erlaubt die Breite und Höhe Ihrer selbstdefinierten Seitengrößen zu bestimmen.
Man Farbdefinitionen aus externen Dateien importieren. Diese Definitionen werden mit den Farben gemischt, die von !PDPEICal erzeugt wurden. Das Mischen findet nach dem Erzeugen der Farben aus den Basisfarben statt. Wenn keine Patronen gewählt wurden, wird mindestens die Papierfarbe intern erzeugt. Dies ist die übliche Methode, um eine externe Kalibrierungsdatei einzubinden. Die zusätzlichen Farben werden aus der kalibrierungsdatei eingelesen, die RGB-Komponenten, Papierfarbenanteil, Druckermuster und Farbgruppeninformation enthält. Die zusätzlichen Farben werden gegen die bereits von !PDPEICal erzeugten Farben auf Duplikate getestet. Liegt ein Duplikat vor, so haben die zusätzlichen Farben die höhere Priorität und ersetzen die bereits von !PDPEICal erzeugten Farben. Eine externe Kalibrierungsdatei darf auf keinen Fall eine Definition für die Papierfarbe enthalten.
Spalte | Inhalt |
---|---|
1 | Rotkomponente der druckbaren Farbe (dezimal 0-255) |
2 | Grünkomponente der druckbaren Farbe (dezimal 0-255) |
3 | Blaukomponente der druckbaren Farbe (dezimal 0-255) |
4 | Druckermuster, um die Farbe zu erzeugen (hexadezimal bis 32 Bit). Hängt von den Bits pro pixel, der Zahl der Patronen und dem vom Drucker benötigten Format für die Pixelintensität ab. |
5 | Farbgruppeninformation (hexadezimal) |
6 | Prozentanteil der Papierfarbe, der benötigt wird, um die Farbe abzubilden. |
Die Ditherinfo Datei liegt unter <Printers$Dir>.Resources.PDumpers.PDumperEI. Sie enthält den Horizontalversatz für jede Zeile während des Ditheringprozesses.
Spalte | Inhalt |
---|---|
1 | Konstanter Wert "ho", steht für horizontal offset |
2 | Zeilennummer bei der der Versatz genutzt werden soll |
3 | Auftrittshäufigkeit bei der der Versatz genutzt werden soll. |
4 | Versatz in Punkten |
In <PDPEICal$Dir>.Resources gibt es ein kleines BASIC Programm namens GenDither, mit dem man sich eine andere Ditherinfo Datei erzeugen lassen kann, wenn einem die aktuelle Datei nicht zusagt.